package stmo.栈;

public class BracketMatchTest {

    /**
     *  括号匹配问题
     */


    public static void main(String[] args) {

        String str = "(上海(长安)())()";
        boolean match = isMatch(str);
        System.out.println(str+"中括号是否匹配："+match);
    }

    private static boolean isMatch(String str) {

        //8个基础类型 byte short int long boolean float double char


        //创建栈对象，用来存储左括号
        Stack<String> stack = new Stack<>();

        //toCharArray() 方法将字符串转换为字符数组。
        char[] charArray = str.toCharArray();
        //从左往右遍历字符串

        for (int i = 0;i < str.length();i++) {

            //charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。
            //String c = str.charAt(i) + "";

            String c = charArray[i]+"";
            //判断当前字符串是否为左括号，如果是，则把字符串放入栈中
            if (c.equals("(")){
                stack.push(c);
            }
            //继续判断当前字符串是否是有括号，如果是，则从栈中弹出一个左括号，并判断弹出的结果是否为null
            //如果不为null，则证明有匹配的左括号
            if (c.equals(")")){
                String pop = stack.pop();
                if (pop == null) {
                    return false;
                }
            }
        }

        //判断栈中还有没有剩余的左括号，如果有则证明括号不匹配
        if (stack.size() != 0) {
            return false;
        }

        return true;
    }


}
